home *** CD-ROM | disk | FTP | other *** search
/ Adobe Digital Video Collection / Digital Video Collection CD.iso / After Effects 5.5 / MMScriptEng.Cab / F115579_gravity.mm < prev    next >
Encoding:
Text File  |  2001-12-07  |  1.6 KB  |  45 lines

  1. // Gravity - Version 1.3
  2.  
  3. // This script applies gravitational force to the layer in layer popup 1.
  4. // The velocity of the layer at the start of the work area
  5. // will be used as the initial velocity.
  6.  
  7. //      LAYER                                               PROPERTY                     CHANNEL
  8. //      ------                                              ----------                     --------
  9. // 1: Layer affected by gravity                  doesn't matter               doesn't matter
  10. // 2: doesn't matter                                   doesn't matter               doesn't matter
  11.  
  12. if (time() == start_time) {
  13.     vel = tmap (time() + step_time, value(pop_layer(1), position)) -
  14.            value(pop_layer(1), position);
  15.     damping = 0.95;                                // Damping force (0 = infinite friction, 1 = none)
  16.     grav = 0.9;                                         // magnitude of gravity force
  17.     grav_dir = {0,1,0};                        // direction of gravity
  18.     accel = grav * grav_dir;      // gravity vector
  19.  
  20.     new_pos = value(pop_layer(1), position);
  21. } else {
  22.  
  23.     vel = vel*damping + accel;                        // Add discrete acceleration to velocity
  24.     new_pos = new_pos + vel;                 // Add discrete velocity to position
  25.     
  26.     // Check new position against borders of comp and bounce back
  27.     if (new_pos[X] < 0) {
  28.         new_pos[X] = 0;
  29.         vel = {-vel[X], vel[Y]};
  30.     }
  31.     if (new_pos[Y] < 0) {
  32.         new_pos[Y] = 0;
  33.         vel = {vel[X], -vel[Y]};
  34.     }
  35.     if (new_pos[X] > comp_size[X]) {
  36.         new_pos[X] = comp_size[X];
  37.         vel = {-vel[X], vel[Y]};
  38.     }
  39.     if (new_pos[Y] > comp_size[Y]) {
  40.         new_pos[Y] = comp_size[Y];
  41.         vel = {vel[X], -vel[Y]};
  42.     }    
  43. }
  44. value(pop_layer(1), position) = new_pos;
  45.